Skip to content

chore: v2.6.0 - #201

Merged
ViperJuice merged 1 commit into
mainfrom
chore/v2.6.0
Aug 27, 2026
Merged

ViperJuice merged 1 commit into
mainfrom
chore/v2.6.0

Conversation

@ViperJuice

@ViperJuice ViperJuice commented Aug 27, 2026 •

Copy link
Copy Markdown
Collaborator

Cuts 2.6.0. Ships #195 (PR #199) and #189 (PR #198).

Why minor, not patch

Behaviour visibly changes. A server launched with an unusual config can no longer be auto-updated — gateway.update_server refuses it by name rather than probing. That is deliberate: guessing is what produced five consecutive identity defects, and a refusal fails every freshness comparison closed.

All 79 bundled npm servers still resolve, and match the real binary, so the shipped fleet is unaffected.

Contents

Verification

  • 227-row differential corpus against the real binary on npm 10.8.2 and 11.19.0, 0 unsafe, 89/89 required rows resolving and matching.
  • 0 of 208 rows diverge in resolver output between the two npm majors.
  • 98/98 manifest entries byte-identical to 2.5.2 on a node-less host.

Known residual

User and global .npmrc are invisible to the resolver, so a package= or registry= line there can still redirect what npm fetches. Stated here rather than discovered later.

CHANGELOG

[Unreleased] folded into ## [2.6.0]; extraction verified to yield one ### Added and one ### Fixed, no duplicate headings.

🤖 Generated with Claude Code

https://claude.ai/code/session_01T61zMNiPF4K29186r3uqc3


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Ships #195 and #189.

#195: npm package identity now comes from npm's own parser -- nopt,
@npmcli/config and npm-package-arg, loaded from the npm the command actually
resolves to, running in a persistent node child. Where anything is unusual it
REFUSES rather than guessing: every parsed config key must be in {yes, package},
the server env overlay must set no npm_config_*/PATH/HOME/NODE_*/PREFIX/NVM_*,
npm must set no local prefix from the effective cwd, and the spec must be a
tag/version/range that does not begin with a dash.

Minor rather than patch: behaviour visibly changes. A server launched with an
unusual config can no longer be auto-updated -- it refuses by name rather than
probing. All 79 bundled npm servers still resolve and match the real binary, so
the shipped fleet is unaffected.

#189: the release-path workflow guards run in CI. release.yml triggers only on
tag push, so it never appeared in PR checks; three layers now gate it --
structural invariants, job-set drift against the merge base, and a label
tripwire for the remainder. 37 committed mutants, 31 killed.

Known residual: user and global .npmrc are invisible to the resolver, so a
package= or registry= line there can still redirect what npm fetches.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T61zMNiPF4K29186r3uqc3
@ViperJuice
ViperJuice merged commit 3413db4 into main Aug 27, 2026
13 checks passed
@ViperJuice
ViperJuice deleted the chore/v2.6.0 branch August 27, 2026 16:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant